package main

import "fmt"

/*
	Go 语言向函数传递数组
如果你想向函数传递数组参数，你需要在函数定义时，声明形参为数组，我们可以通过以下两种方式来声明：
方式一
形参设定数组大小：

void myFunction(param [10]int)
{
.
.
.
}
方式二
形参未设定数组大小：

void myFunction(param []int)
{
.
.
.
}

数组做函数参数，它是值传递
实参数组的每个元素给形参数组拷贝一份
形参的数组是实参数组的复制品
*/
func getAverage(arr [5]int, size int) float32 {
	var i, sum int
	var avg float32

	for i = 0; i < size; i++ {
		sum += arr[i]
	}

	avg = float32(sum) / float32(size)

	return avg
}

//动态数组（slice）参数，引用传递
func getAverage2(arr []int) float32 {
	var i, sum int
	var avg float32

	for i = 0; i < len(arr); i++ {
		sum += arr[i]
	}

	avg = float32(sum) / float32(len(arr))

	return avg
}
func main17() {
	/* 数组长度为 5 */
	var balance = [5]int{1000, 2, 3, 17, 50}
	var avg float32

	/* 数组作为参数传递给函数 */
	avg = getAverage(balance, 5)

	/* 输出返回的平均值 */
	fmt.Printf("平均值为: %f ", avg)

	/* 数组作为参数传递给函数 */
	avg = getAverage2(balance[1:3]) //包含头，不包含尾

	/* 输出返回的平均值 */
	fmt.Printf("平均值为: %f ", avg)
}
